/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Services;

import Bean.Codigo;
import Bean.Evaluacion;
import Bean.Respuesta;
import Bean.Views.DragDropView;
import Bean.Views.Ejercicio;
import Bean.Views.PreguntaView;
import Bean.Views.SintaxisView;
import Util.Constantes;
import java.util.ArrayList;
import java.util.Random;
/**
 *
 * @author Manuel Lap
 */
public class GeneradorEvaluacion {

     ArrayList<Ejercicio> ejercicios = new ArrayList<Ejercicio>();
     ArrayList<Integer> tiposEjercicio = new ArrayList<Integer>();
     ArrayList<Codigo> codigos = new ArrayList<Codigo>();
     ArrayList<PreguntaView> preguntas = new ArrayList<PreguntaView>();
     Sintaxis adminSintaxis = new Sintaxis();

     GestionPreguntasSrv pregSrv = new GestionPreguntasSrv();
     CodigoSrv codeSrv = new CodigoSrv();

     public GeneradorEvaluacion(){
         preguntas = pregSrv.getPreguntasWiew();
         codigos = codeSrv.getCodigos();
     }

     public ArrayList<Ejercicio> generarEjercicio(){
         tiposEjercicio = getRandomEjercicios();
         for(int num = 0; num < Constantes.NUMERO_EJERCICIOS; num++){
             if(tiposEjercicio.get(num) == Constantes.DRAG_DROP) ejercicios.add(getDragDrop());
             else if(tiposEjercicio.get(num) == Constantes.SINTAXIS) ejercicios.add(getSintaxis());
             else if(tiposEjercicio.get(num) == Constantes.PREGUNTAS) ejercicios.add(getPreguntas());
             else{
             }
         }
         return ejercicios;
     }

     private ArrayList<Integer> getRandomEjercicios(){
         ArrayList<Integer> ejerciciosNum = new ArrayList<Integer>();
         Random ran = new Random();
         for(int cont = 0; cont < Constantes.NUMERO_EJERCICIOS; cont++){
             ejerciciosNum.add(ran.nextInt(3)+1);
         }
         return ejerciciosNum;
     }

     private Ejercicio getDragDrop(){
         DragDropView drag = new DragDropView(codigos.get(random(codigos.size())).getCodigo(), Sintaxis.toStringArrayNoEspaces(codigos.get(0).getCodigo()));
         return drag;
     }

     private Ejercicio getSintaxis(){
         SintaxisView sintaxis = new SintaxisView(codigos.get(random(codigos.size())).getCodigo());
         sintaxis.setCodigoIncorrecto(adminSintaxis.generaEjercicioString(sintaxis.getCodigoCorrecto()));
         return sintaxis;
     }

     private Ejercicio getPreguntas(){
         return preguntas.get(random(preguntas.size()));
     }

     private int random(int numMax){
         Random ran = new Random();
         return ran.nextInt(numMax);
     }

}
